<!DOCTYPE html>
<html lang="en">
<head>
  <title>Vert.x JDBC client - Vert.x</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <meta content="Vert.x is a tool-kit for building reactive applications on the JVM." name="description">
  <link href="http://vertx.io/stylesheets/docs.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/stylesheets/font-awesome.min.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/javascripts/styles/rainbow.min.css" media="screen" rel="stylesheet">
  <!-- IE 6-8 support of HTML 5 elements -->
  <!--[if lt IE 9]>
  <script src="http://static.jboss.org/theme/js/libs/html5/pre3.6/html5.min.js"></script>
  <![endif]-->

  <link rel="apple-touch-icon" sizes="57x57" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="http://vertx.io/assets/favicons/vertx-favicon-7/manifest.json">
  <link rel="mask-icon" href="http://vertx.io/assets/favicons/vertx-favicon-7/safari-pinned-tab.svg" color="#5bbad5">
  <meta name="msapplication-TileColor" content="#7d3194">
  <meta name="msapplication-TileImage" content="http://vertx.io/assets/favicons/vertx-favicon-7/mstile-144x144.png">
  <meta name="theme-color" content="#ffffff">

  <link href="http://fonts.googleapis.com/css?family=Ubuntu:400,500,700,400italic" rel="stylesheet" type="text/css">
  <link rel="alternate" type="application/rss+xml" title="RSS"
     href="http://vertx.io/feed.xml">
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-30144458-1', 'auto');
    ga('create', 'UA-71153120-1', 'auto', 'tracker');
    ga('send', 'pageview');
    ga('tracker.send', 'pageview');
  </script>
</head>
<body>

<a href="http://www.reactivemanifesto.org/" id="reactive-manifesto-banner">
  <img style="border: 0; position: fixed; right: 0; top:0; z-index: 9000"
    src="http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-black-right.png">
</a>

<a id="skippy" class="sr-only sr-only-focusable" href="#content"><div class="container"><span class="skiplink-text">Skip to main content</span></div></a>

<header class="navbar navbar-default navbar-static-top" id="top" role="banner">
  <div class="container">
    <div class="navbar-header">
      <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#vertx-navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="http://vertx.io/" class="navbar-brand"><img alt="Brand" src="http://vertx.io/assets/logo-sm.png"></a>
    </div>
    <nav class="collapse navbar-collapse" id="vertx-navbar-collapse">
      <ul class="nav navbar-nav navbar-right">
        <li><a href="http://vertx.io/download/">Download</a></li>
        <li><a href="http://vertx.io/docs/">Documentation</a></li>
        <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
        <li><a href="http://vertx.io/community/">Community</a></li>
        <li><a href="http://vertx.io/materials/">Materials</a></li>
        <li><a href="http://vertx.io/blog/">Blog</a></li>        
      </ul>
    </nav>
  </div>
</header>



  <div class="page-header" id="content">
    <div class="container">
      <div class="row">
        <div class="col-sm-12">
          <h1>Vert.x JDBC client</h1>
          
        </div>
      </div>
    </div>
  </div>




<div id="content">
  <div class="container docs-content">
    <div class="row">
      <div class="col-sm-12 col-md-push-9 col-md-3 hidden-xs hidden-sm">
        <div id="sidebar" data-spy="affix">
          <ul class="sectlevel1">
<li><a href="#_creating_a_the_client">Creating a the client</a>
<ul class="sectlevel2">
<li><a href="#_using_default_shared_data_source">Using default shared data source</a></li>
<li><a href="#_specifying_a_data_source_name">Specifying a data source name</a></li>
<li><a href="#_creating_a_client_with_a_non_shared_data_source">Creating a client with a non shared data source</a></li>
<li><a href="#_specifying_a_data_source">Specifying a data source</a></li>
</ul>
</li>
<li><a href="#_closing_the_client">Closing the client</a>
<ul class="sectlevel2">
<li><a href="#_automatic_clean_up_in_verticles">Automatic clean-up in verticles</a></li>
</ul>
</li>
<li><a href="#_getting_a_connection">Getting a connection</a></li>
<li><a href="#_configuration">Configuration</a></li>
<li><a href="#_jdbc_drivers">JDBC Drivers</a></li>
<li><a href="#_data_types">Data types</a></li>
<li><a href="#_use_as_osgi_bundle">Use as OSGi bundle</a></li>
</ul>
        </div>
      </div>
      <div class="col-sm-12 col-md-pull-3 col-md-9">
        <div class="toc hidden-md hidden-lg">
          <h2>Table of Contents</h2>
          <ul class="sectlevel1">
<li><a href="#_creating_a_the_client">Creating a the client</a>
<ul class="sectlevel2">
<li><a href="#_using_default_shared_data_source">Using default shared data source</a></li>
<li><a href="#_specifying_a_data_source_name">Specifying a data source name</a></li>
<li><a href="#_creating_a_client_with_a_non_shared_data_source">Creating a client with a non shared data source</a></li>
<li><a href="#_specifying_a_data_source">Specifying a data source</a></li>
</ul>
</li>
<li><a href="#_closing_the_client">Closing the client</a>
<ul class="sectlevel2">
<li><a href="#_automatic_clean_up_in_verticles">Automatic clean-up in verticles</a></li>
</ul>
</li>
<li><a href="#_getting_a_connection">Getting a connection</a></li>
<li><a href="#_configuration">Configuration</a></li>
<li><a href="#_jdbc_drivers">JDBC Drivers</a></li>
<li><a href="#_data_types">Data types</a></li>
<li><a href="#_use_as_osgi_bundle">Use as OSGi bundle</a></li>
</ul>
        </div>
        <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This client allows you to interact with any JDBC compliant database using an asynchronous API from your Vert.x
application.</p>
</div>
<div class="paragraph">
<p>The client API is represented with the interface <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.type.html">JDBCClient</a></code>.</p>
</div>
<div class="paragraph">
<p>To use this project, add the following dependency to the <em>dependencies</em> section of your <code>module.ceylon</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">shared import io.vertx.ceylon.jdbc "3.3.2";</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_creating_a_the_client">Creating a the client</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are several ways to create a client. Let&#8217;s go through them all.</p>
</div>
<div class="sect2">
<h3 id="_using_default_shared_data_source">Using default shared data source</h3>
<div class="paragraph">
<p>In most cases you will want to share a data source between different client instances.</p>
</div>
<div class="paragraph">
<p>E.g. you scale your application by deploying multiple instances of your verticle and you want each verticle instance
to share the same datasource so you don&#8217;t end up with multiple pools</p>
</div>
<div class="paragraph">
<p>You do this as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">import io.vertx.ceylon.ext.jdbc { jdbcClient }

...


value client = jdbcClient.createShared(vertx, config);</code></pre>
</div>
</div>
<div class="paragraph">
<p>The first call to <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.object.html#createShared(io.vertx.core.Vertx,%20io.vertx.core.json.JsonObject)">JDBCClient.createShared</a></code>
will actually create the data source, and the specified config will be used.</p>
</div>
<div class="paragraph">
<p>Subsequent calls will return a new client instance that uses the same data source, so the configuration won&#8217;t be used.</p>
</div>
</div>
<div class="sect2">
<h3 id="_specifying_a_data_source_name">Specifying a data source name</h3>
<div class="paragraph">
<p>You can create a client specifying a data source name as follows</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">import io.vertx.ceylon.ext.jdbc { jdbcClient }

...



value client = jdbcClient.createShared(vertx, config, "MyDataSource");</code></pre>
</div>
</div>
<div class="paragraph">
<p>If different clients are created using the same Vert.x instance and specifying the same data source name, they will
share the same data source.</p>
</div>
<div class="paragraph">
<p>The first call to <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.object.html#createShared(io.vertx.core.Vertx,%20io.vertx.core.json.JsonObject)">JDBCClient.createShared</a></code>
will actually create the data source, and the specified config will be used.</p>
</div>
<div class="paragraph">
<p>Subsequent calls will return a new client instance that uses the same data source, so the configuration won&#8217;t be used.</p>
</div>
<div class="paragraph">
<p>Use this way of creating if you wish different groups of clients to have different data sources, e.g. they&#8217;re
interacting with different databases.</p>
</div>
</div>
<div class="sect2">
<h3 id="_creating_a_client_with_a_non_shared_data_source">Creating a client with a non shared data source</h3>
<div class="paragraph">
<p>In most cases you will want to share a data source between different client instances.
However, it&#8217;s possible you want to create a client instance that doesn&#8217;t share its data source with any other client.</p>
</div>
<div class="paragraph">
<p>In that case you can use <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.object.html#createNonShared(io.vertx.core.Vertx,%20io.vertx.core.json.JsonObject)">JDBCClient.createNonShared</a></code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">import io.vertx.ceylon.ext.jdbc { jdbcClient }

...


value client = jdbcClient.createNonShared(vertx, config);</code></pre>
</div>
</div>
<div class="paragraph">
<p>This is equivalent to calling <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.object.html#createShared(io.vertx.core.Vertx,%20io.vertx.core.json.JsonObject,%20java.lang.String)">JDBCClient.createShared</a></code>
with a unique data source name each time.</p>
</div>
</div>
<div class="sect2">
<h3 id="_specifying_a_data_source">Specifying a data source</h3>
<div class="paragraph">
<p>If you already have a pre-existing data source, you can also create the client directly specifying that:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">import io.vertx.ceylon.ext.jdbc { jdbcClient }

...


value client = jdbcClient.create(vertx, dataSource);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_closing_the_client">Closing the client</h2>
<div class="sectionbody">
<div class="paragraph">
<p>It&#8217;s fine to keep hold of the client for a long time (e.g. the lifetime of your verticle), but once you&#8217;re
done with it you should close it.</p>
</div>
<div class="paragraph">
<p>Clients that share a data source with other client instances are reference counted. Once the last one that references
the same data source is closed, the data source will be closed.</p>
</div>
<div class="sect2">
<h3 id="_automatic_clean_up_in_verticles">Automatic clean-up in verticles</h3>
<div class="paragraph">
<p>If you&#8217;re creating clients from inside verticles, the clients will be automatically closed when the verticle is undeployed.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_getting_a_connection">Getting a connection</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Once you&#8217;ve created a client you use <code><a href="../../ceylondoc/vertx-jdbc//JDBCClient.type.html#getConnection(io.vertx.core.Handler)">getConnection</a></code> to get
a connection.</p>
</div>
<div class="paragraph">
<p>This will return the connection in the handler when one is ready from the pool.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">// Now do stuff with it:

client.getConnection((SQLConnection|Throwable res) {
  if (is SQLConnection res) {

    value connection = res;

    connection.query("SELECT * FROM some_table", (ResultSet|Throwable res2) {
      if (is ResultSet res2) {

        value rs = res2;
        // Do something with results
      };
    });
  } else {
    // Failed to get connection - deal with it
  };
});</code></pre>
</div>
</div>
<div class="paragraph">
<p>The connection is an instance of <code><a href="../../ceylondoc/vertx-sql//SQLConnection.type.html">SQLConnection</a></code> which is a common interface not only used by
the Vert.x JDBC Client.</p>
</div>
<div class="paragraph">
<p>You can learn how to use it in the <a href="http://vertx.io/docs/vertx-sql-common/ceylon/">common sql interface</a> documentation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_configuration">Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Configuration is passed to the client when creating or deploying it.</p>
</div>
<div class="paragraph">
<p>The following configuration properties generally apply:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>provider_class</code></dt>
<dd>
<p>The class name of the class actually used to manage the database connections. By default this is
`io.vertx.ext.jdbc.spi.impl.C3P0DataSourceProvider`but if you want to use a different provider you can override
this property and provide your implementation.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Assuming the C3P0 implementation is being used (the default), the following extra configuration properties apply:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>url</code></dt>
<dd>
<p>the JDBC connection URL for the database</p>
</dd>
<dt class="hdlist1"><code>driver_class</code></dt>
<dd>
<p>the class of the JDBC driver</p>
</dd>
<dt class="hdlist1"><code>user</code></dt>
<dd>
<p>the username for the database</p>
</dd>
<dt class="hdlist1"><code>password</code></dt>
<dd>
<p>the password for the database</p>
</dd>
<dt class="hdlist1"><code>max_pool_size</code></dt>
<dd>
<p>the maximum number of connections to pool - default is <code>15</code></p>
</dd>
<dt class="hdlist1"><code>initial_pool_size</code></dt>
<dd>
<p>the number of connections to initialise the pool with - default is <code>3</code></p>
</dd>
<dt class="hdlist1"><code>min_pool_size</code></dt>
<dd>
<p>the minimum number of connections to pool</p>
</dd>
<dt class="hdlist1"><code>max_statements</code></dt>
<dd>
<p>the maximum number of prepared statements to cache - default is <code>0</code>.</p>
</dd>
<dt class="hdlist1"><code>max_statements_per_connection</code></dt>
<dd>
<p>the maximum number of prepared statements to cache per connection - default is <code>0</code>.</p>
</dd>
<dt class="hdlist1"><code>max_idle_time</code></dt>
<dd>
<p>number of seconds after which an idle connection will be closed - default is <code>0</code> (never expire).</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Other Connection Pool providers are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>BoneCP</p>
</li>
<li>
<p>Hikari</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Similar to C3P0 they can be configured by passing the configuration values on the JSON config object. For the special
case where you do not want to deploy your app as a fat jar but run with a vert.x distribution, then it is recommented
to use BoneCP if you have no write permissions to add the JDBC driver to the vert.x lib directory and are passing it
using the <code>-cp</code> command line flag.</p>
</div>
<div class="paragraph">
<p>If you want to configure any other C3P0 properties, you can add a file <code>c3p0.properties</code> to the classpath.</p>
</div>
<div class="paragraph">
<p>Here&#8217;s an example of configuring a service:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">import io.vertx.ceylon.ext.jdbc { jdbcClient }

...


value config = JsonObject {
  url = "jdbc:hsqldb:mem:test?shutdown=true";
  driver_class = "org.hsqldb.jdbcDriver";
  max_pool_size = 30;
};

value client = jdbcClient.createShared(vertx, config);</code></pre>
</div>
</div>
<div class="paragraph">
<p>Hikari uses a different set of properties:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>jdbcUrl</code> for the JDBC URL</p>
</li>
<li>
<p><code>driverClassName</code> for the JDBC driven class name</p>
</li>
<li>
<p><code>maximumPoolSize</code> for the pool size</p>
</li>
<li>
<p><code>username</code> for the login (<code>password</code> for the password)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Refer to the <a href="https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby">Hikari documentation</a>
for further details. Also refer to the <a href="http://www.jolbox.com/configuration.html">BoneCP documentation</a>
to configure BoneCP.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jdbc_drivers">JDBC Drivers</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If you are using the default <code>DataSourceProvider</code> (relying on c3p0), you would need to copy the JDBC driver class
in your <em>classpath</em>.</p>
</div>
<div class="paragraph">
<p>If your application is packaged as a <em>fat jar</em>, be sure to embed the jdbc driver. If your application is launched
with the <code>vertx</code> command line, copy the JDBC driver to <code>${VERTX_HOME}/lib</code>.</p>
</div>
<div class="paragraph">
<p>The behavior may be different when using a different connection pool.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_data_types">Data types</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Due to the fact that Vert.x uses JSON as its standard message format there will be many limitations to the data types
accepted by the client. You will get out of the box the standard:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>null</p>
</li>
<li>
<p>boolean</p>
</li>
<li>
<p>number</p>
</li>
<li>
<p>string</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>There is also an optimistic cast for temporal types (TIME, DATE, TIMESTAMP) and optionally disabled for UUID. UUIDs
are supported by many databases but not all. For example MySQL does not support it so the recommended way is to use
a VARCHAR(36) column. For other engines UUID optimistic casting can be enabled using the client config json as:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>{ "UUIDCast": true }</pre>
</div>
</div>
<div class="paragraph">
<p>When this config is present UUIDs will be handled as a native type.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_use_as_osgi_bundle">Use as OSGi bundle</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Vert.x JDBC client can be used as an OSGi bundle. However notice that you would need to deploy all dependencies
first. Some connection pool requires the JDBC driver to be loaded from the classpath, and so cannot be packaged /
deployed as bundle.</p>
</div>
</div>
</div>

        

        
          <div id="footer">
            <div id="footer-text">
              
                Last updated 2016-09-12 08:38:06 CEST
              
              
            </div>
          </div>
        
      </div>
    </div>
  </div>
</div>

<footer>
  <div class="container">
    <div class="row">
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Vert.x</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/">Home</a></li>
          <li><a href="http://vertx.io/download/">Download</a></li>
          <li><a href="http://vertx.io/docs/">Documentation</a></li>
          <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
          <li><a href="http://vertx.io/blog/">Blog</a></li>
          <li><a href="http://vertx.io/vertx2/" class="vertx-2-link">Vert.x 2</a></li>
        </ul>
      </div>
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Community</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/community/">Help &amp; Contributors</a></li>
          <li><a href="http://vertx.io/materials/">Learning materials</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx">User Group</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx-dev">Developer Group</a></li>
        </ul>
      </div>

      <div class="col-xs-12 col-sm-6 col-lg-offset-2 col-md-6 copyright">
        <p>Vert.x is open source and dual licensed under the <a href="https://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License 1.0</a> and <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>.</p>
        <p>This website is licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 License</a>.<br>
        Design by <a href="http://www.michel-kraemer.com">Michel Kr&auml;mer</a>. <a href="http://www.entypo.com">Entypo pictograms</a> by Daniel Bruce.</p>
        <div class="row">
          <div class="col-xs-12 col-lg-offset-1 col-md-5">
            <a href="http://eclipse.org">
            <img class="logo eclipse-logo" src="http://vertx.io/assets/eclipse_logo_grey_small.png" width="204" height="48">
            </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-0 col-md-5">
            <a href="http://cloudbees.com">
            <img class="logo cloudbees-logo" src="http://vertx.io/assets/Button-Built-on-CB-1-grey.png" width="180" height="48">
           </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-1 col-md-5 jprofiler">
            <a href="http://www.ej-technologies.com/products/jprofiler/overview.html"
            style="text-decoration:none">
            <img class="logo jprofiler-logo" src="http://vertx.io/assets/jprofiler-logo.png" width="48" height="48"><span class="jprofiler-logo">&nbsp; JPROFILER</span>
            </a>
          </div>
        </div>
      </div>
    </div>
  </div>
</footer>

<script src="http://static.jboss.org/theme/js/libs/jquery/jquery-1.9.1.min.js"></script>
<script src="http://vertx.io/javascripts/bootstrap.min.js"></script>
<script src="http://vertx.io/javascripts/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



<script src="http://vertx.io/javascripts/sidebar.js"></script>


</body>
</html>
